/**
 * Copyright (c) 2006, Reliable Source, Inc. All Rights Reserved
 */
package org.reliablesource.prism.core;

/**
 * Created on: Mar 11, 2006
 * 
 * @author Dennis Park <a
 *         href="mailto:dennis.park@gmail.com">dennis.park@gmail.com</a>
 * 
 * @since 1.0
 * 
 */

public interface IPrismElementFactory {

	/**
	 * The created PrismTutorial instance is added to the singleton instance of
	 * the <code>PrismModel</code>. Currently supports only one Tutorial per
	 * running instance.
	 * 
	 * @return new <code>IPrismTutorial</code> instance.
	 * @since 1.0
	 */
	public IPrismTutorial createTutorialNode();

	/**
	 * Instantiates a Screen element, adds the Screen element to the top-most (
	 * 0 ) indexed Tutorial element in the Model. If the Model has no Tutorial
	 * elements, then a new Tutorial element is created and added to the Model.
	 * 
	 * @return new <code> IPrismScreen</code> instance.
	 */
	public IPrismScreen createScreen();

	/**
	 * @Deprecated - For testing only!
	 */
	public IPrismElement createTestTutorialNode();

	/**
	 * Creates an Annotation element on the given parent Screen object
	 * parameter.
	 * 
	 * @param parentScreen
	 *            the Screen which the Annotation will be assigned.
	 * @return newly created <code>IPrismAnnotation</code> object.
	 */
	public IPrismAnnotation createPrismAnnotation(IPrismScreen parentScreen);

	public IPrismModel createModel();

	public IPrismUpdateEvent createUpdateEvent(int type);
}
